ungetc関数は、一度入力したデータを再度入力できるように、ストリームに戻します。戻せるのは1文字だけです。
#include <stdio.h>
int ungetc(int c, FILE *stream);
cはストリームに戻すデータを指定します。
*streamはfopen関数で取得した、ファイルポインタを指定します。
戻り値として、正常に処理できた場合は第1引数のcの値を、エラーの場合はEOFの値を返します。
プログラム 例
#include <stdio.h> int main(int argc, char **argv) { FILE *fp; int in_data; int return_code = 0; if (argc == 2) { if ((fp = fopen(*(argv+1), 'r')) != NULL) { while((in_data = fgetc(fp)) != EOF) { if ((char)in_data == ' ') { /* スペースだったら、#を戻す */ ungetc('#', fp); } else { /* スペースでなかったら、そのまま出力 */ putchar(in_data); } } fclose(fp); } else { printf('ファイルのオープンに失敗しました\n'); return_code = 1; } } else { printf('実行時引数の数が不当です\n'); return_code = 2; } return return_code; }
例の実行結果
$ ./ungetc.exe temp.txt #include#<stdio.h> int#main() { ##printf('Hello#World!!.\n'); ##return#0; } $